/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.eventos.bc.CursoDelegate;
import org.cip.esymons.eventos.bc.DetalleMaterialDelegate;
import org.cip.esymons.eventos.bc.MaterialAcademicoDelegate;
import org.cip.esymons.eventos.be.Curso;
import org.cip.esymons.eventos.be.DetalleMaterial;
import org.cip.esymons.eventos.be.MaterialAcademico;
import org.cip.esymons.eventos.be.Preevento;
/**
 *
 * @author Lizardo Rios
 */
public class MaterialAcademicoController {

    private MaterialAcademicoDelegate delegado;
    private DetalleMaterialDelegate delegadoDetalleMaterial;
    private CursoDelegate delegadoCurso;
    List<MaterialAcademico> listaMaterialAcademico;
    List<DetalleMaterial> listaDetalleMaterial;
    private MaterialAcademico materialAcademico;
    private DetalleMaterial detalleMaterial;
    private Integer codigoCurso;
    private boolean habilitar;
    
    /***************************  Constructor *******************************/
    public MaterialAcademicoController() {
        inicializar();
    }

    /*************************** Setters and Getters  ***********************/
    public MaterialAcademicoDelegate getDelegado() {
        return delegado;
    }

    public List<MaterialAcademico> getListaMaterialAcademico() {
        return listaMaterialAcademico;
    }
    public void setListaMaterialAcademico(List<MaterialAcademico> listaMateriaAcademico) {
        this.listaMaterialAcademico = listaMateriaAcademico;
    }

    public MaterialAcademico getMaterialAcademico() {
        return materialAcademico;
    }
    public void setMaterialAcademico(MaterialAcademico materialAcademico) {
        this.materialAcademico = materialAcademico;
    }

    public Integer getCodigoCurso() {
        return codigoCurso;
    }
    public void setCodigoCurso(Integer codigoCurso) {
        this.codigoCurso = codigoCurso;
    }

    public CursoDelegate getDelegadoCurso() {
        return delegadoCurso;
    }
    public void setDelegadoCurso(CursoDelegate delegadoCurso) {
        this.delegadoCurso = delegadoCurso;
    }

    public DetalleMaterial getDetalleMaterial() {
        return detalleMaterial;
    }
    public void setDetalleMaterial(DetalleMaterial detalleMaterial) {
        this.detalleMaterial = detalleMaterial;
    }

    public List<DetalleMaterial> getListaDetalleMaterial() {
        return listaDetalleMaterial;
    }
    public void setListaDetalleMaterial(List<DetalleMaterial> listaDetalleMaterial) {
        this.listaDetalleMaterial = listaDetalleMaterial;
    }

    public DetalleMaterialDelegate getDelegadoDetalleMaterial() {
        return delegadoDetalleMaterial;
    }
    public void setDelegadoDetalleMaterial(DetalleMaterialDelegate delegadoDetalleMaterial) {
        this.delegadoDetalleMaterial = delegadoDetalleMaterial;
    }

    public boolean getHabilitar() {
        return habilitar;
    }
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**********************************  Metodos  *****************************/
    public void inicializar() {
        materialAcademico = new MaterialAcademico();
        detalleMaterial = new DetalleMaterial();
        delegado = new MaterialAcademicoDelegate();
        delegadoCurso = new CursoDelegate();
        delegadoDetalleMaterial = new DetalleMaterialDelegate();
        listaMaterialAcademico = new ArrayList<MaterialAcademico>();
        listaDetalleMaterial = new ArrayList<DetalleMaterial>();
        listar();
    }

    public String insertar() {
        try {
            Curso curso = new Curso();
            curso = delegadoCurso.find(codigoCurso);
            materialAcademico.setCurCodigo(curso);
            System.out.println("curso: " + materialAcademico.getCurCodigo());
            habilitar = true;
            delegado.create(materialAcademico);
            materialAcademico =  delegado.buscarUltimoCodigo();
            detalleMaterial.setMacCodigo(materialAcademico);
            delegadoDetalleMaterial.create(detalleMaterial);
            detalleMaterial = new DetalleMaterial();
            curso = null;
            return listarDetalleMaterial();
        } catch (Exception e) {
            habilitar = false;
            mostrarMensaje("Error: ", "Ingrese datos obligatorios! " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }

    public String actualizar() {
        try {
//            Curso curso = new Curso();
//            curso = delegadoCurso.find(codigoCurso);
            //materialAcademico.setCurCodigo(curso);
            System.out.println(materialAcademico.getCurCodigo());
            materialAcademico.setCurCodigo(materialAcademico.getCurCodigo());
            habilitar = true;
            delegado.edit(materialAcademico);
            return null;
        } catch (Exception e) {
            habilitar = false;
            mostrarMensaje("Error: ", "Ingrese datos obligatorios! " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }

    public String eliminar() {
        try {
            delegado.remove(materialAcademico);
            return listar();
        } catch (Exception e) {
            mostrarMensaje("Error: ", "No se puede eliminar este material academico! " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }

    //operaciones para el detalle material
     public String agregarDetalle() {
        try {
            detalleMaterial.setMacCodigo(materialAcademico);
            System.out.println("material: " + detalleMaterial.getMacCodigo());
            System.out.println("contenido: " + detalleMaterial.getDmaContenido());
            delegadoDetalleMaterial.create(detalleMaterial);
            detalleMaterial = new DetalleMaterial();
            return listarDetalleMaterial();
        } catch (Exception e) {
            mostrarMensaje("Error: ", "Ingrese contenidos! " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }

    public String eliminarDetalle() {
        try {
            delegadoDetalleMaterial.remove(detalleMaterial);
            return listarDetalleMaterial();
        } catch (Exception e) {
            mostrarMensaje("Error: ", "No se puede eliminar este contenido! " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
            return null;
        }
    }

    public String cancelar() {
        materialAcademico = new MaterialAcademico();
        return null;
    }

    public String listar() {
        try {
            codigoCurso = (codigoCurso == null) ? 0 : codigoCurso;
            listaMaterialAcademico = delegado.listarMaterialesXCurso(codigoCurso);
            listaDetalleMaterial = new ArrayList<DetalleMaterial>();
        } catch (Exception e) {
            mostrarMensaje("Error: ", "No se puede mostrar material, " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "listar";
    }

    public String listarDetalleMaterial() {
        try {
            listaDetalleMaterial = delegadoDetalleMaterial.listarDetalleXMaterial(materialAcademico.getMacCodigo());
        } catch (Exception e) {
            mostrarMensaje("Error: ", "No se puede mostrar detalle material, " + e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

//    public String validarCodigoCurso() {
//
//        return null;
//    }

    public String ir_a_nuevo() {
        habilitar = false;
        materialAcademico = new MaterialAcademico();
        return "nuevo";
    }

    public String ir_a_editar() {
        habilitar = false;
        return "editar";
    }

    public SelectItem[] getComboCursos() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            List<Preevento> listaCurso = delegadoCurso.listarCursosEnProceso();
            selects = new SelectItem[listaCurso.size()];
            int cont = 0;
            for (Preevento preevento : listaCurso) {
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Curso");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

}
